#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define B_WHITE "\e[47m"
#define B_RED   "\e[41m"
#define C_WHITE "\e[37m"
#define C_RED   "\e[31m"

void clrscr(void);
void cursorPos(int x,int y);
void line(int w);
void column(int h);
void canto();
void box(int x, int y, int w, int h);
void window(char *title,int x,int y,int w,int h);
void cursorUp(int l);
void cursorDown(int l);
void cursorBack(int c);
void cursorForward(int c);
void colors();
void blink();
void defaults();

void clrscr(void)
{
    printf("\e[H\e[J");
}

void line(int w)
{
    int i;
    for( i = 0; i < w; i++ )
    {
        printf("-");
    }
}
void column(int h)
{
    int i;
    for( i = 0; i < h; i++ )
    {
        printf("|");
        cursorDown(1);
        cursorBack(1);
    }
}

void canto()
{
    printf("+");
}

/*
 * box()
 * print a box
 * (line, column, width, height)
 */
void box(int x, int y, int w, int h)
{
    int i;
    int space = w - 2;
    int lines = h - 2;
    //validacao
    if( w < 3 )
    {
        printf("Invalid box width!\n");
    }
    if( h < 3 )
    {
        printf("Invalid box height!\n");
    }
    //linha superior
    cursorPos(x,y);
    canto();
    line(space);
    canto();
    //coluna esquerda
    cursorPos(x,y+1);
    column(lines);
    //coluna direita
    cursorPos(x+space+1,y+1);
    column(lines);
    //linha rodape
    cursorPos(x,y+lines);
    canto();
    line(space);
    canto();
    cursorPos(x+1,y+1);
}

/*
 * window()
 * print a box with title
 * (title, line, column, width, height)
 */
void window(char *title,int x,int y,int w,int h)
{
    int posTitle;
    box(x,y,w,4);
    posTitle = y + (w - strlen(title))/2;
    cursorPos(posTitle,y+1);
    printf(title);
    box(x,y+2,w,h-3);
}

void cursorPos(int x,int y)
{
    printf("\e[%d;%dH",y,x);
}

void cursorUp(int l)
{
    printf("\e[%dA",l);
}

void cursorDown(int l)
{
    printf("\e[%dB",l);
}

void cursorBack(int c)
{
    printf("\e[%dD",c);
}

void cursorForward(int c)
{
    printf("\e[%dC",c);
}

void colors()
{
    printf(B_WHITE); //fundo
    printf(C_RED); //char
}

void blink()
{
    printf("\e[5m");
}

void defaults()
{
    printf("\e[0m");
}
/*
int main()
{
//    colors();
    clrscr();
//    printf("teste");
//    printf("teste1");
//    blink();
//    cursorPos(7,7);
//    printf("teste3");
//    defaults();
//    printf("\n LALAL");

//    box(10,10,10,10);

    window("titulo",10,10,30,20);
    cursorPos(40,40);
//    printf("\e[J");
}
*/
